/* 
前端模块化规范是有非常多的

在es6模块化规范之前有
*/

/* 
Commonjs - > Nodejs

// 导入
require("xxx");
require("../xxx.js");
// 导出
exports.xxxxxx = function () { };
module.exports = xxxxx; 
*/

/* 
AMD -> requireJs

// 定义
define("module", ["dep1", "dep2"], function (d1, d2) {...});
// 加载模块
require(["module", "../app"], function (module, app) {...});
*/

/* 
CMD -> seaJs    // 国产的 也是杂糅的

define(function (require, exports, module) {
  var a = require('./a');
  a.doSomething();

  var b = require('./b');
  b.doSomething();
});
*/

/* 
UMD -> UMD是AMD和CommonJS的糅合

(function (window, factory) {
  // 检测是不是 Nodejs 环境
  if (typeof module === 'object' && typeof module.exports === "objects") {
    module.exports = factory();
  }
  // 检测是不是 AMD 规范
  else if (typeof define === 'function' && define.amd) {
    define(factory);
  }
  // 使用浏览器环境
  else {
    window.eventUtil = factory();
  }
})(this, function () {
  //module ...
});
*/

/* 
es6模块化规范出来之后上面这些模块化规范就用的比较少了

现在主要使用 import export  
*/

/* 
es6模块化规范用法
.1.默认导出 和 引入

默认导出可以导出任意类型，这儿举例导出一个对象，并且默认导出只能有一个

引入的时候名字可以随便起
*/

// 2.默认导出和分别导出
/* 
import all, {add, x} from "./testImport&Export"

console.log(all);
console.log(add(1, 6), x);
*/

// 3.解构导出
/* import { arr, add, x } from "./testImport&Export";

console.log(arr, add(5, 9), x); */

// 4.查看所有未知的模块内容
import * as api from "./testImport&Export";

console.log(api)

// 动态引入
// import只能在最上层使用
if(true) {
  import("./testImport&Export").then(res => {
    console.log(res);
  })
}





